import text.TextComponent;
import text.TextPrefix;
import text.TextSuffix;
import text.TextValue;

/**
 * 装饰器模式（Decorator Pattern）是一种结构型设计模式，它允许在运行时向对象添加新的行为或职责，
 * 而不必修改对象的原始类。装饰器模式通过将对象包装在装饰类中，可以动态地扩展对象的功能，
 * 同时保持与原对象的接口一致，因此客户端代码可以透明地使用装饰后的对象，而无需知道装饰过程。
 * 并且因为装饰器和原对象是同一类型，因此还可以通过链式装饰来实现嵌套多层装饰的效果
 */
public class Main {

    public static final String value = "粥灰灰";
    public static void main(String[] args) {
        textTest();
    }

    public static void textTest() {
        TextComponent text = new TextValue(value);
        TextComponent originText = text;
        // 给文本添加一个前缀修饰器
        text = 封装前缀(text, "前缀 -> ");
        // 给文本添加一个后缀修饰器
        text = 封装后缀(text, " <- 后缀");
        // 最后得到的是经过两个修饰器修饰过的文本，这里放一个原始文本做对比
        System.out.println(originText.getValue());
        System.out.println(text.getValue());
    }

    public static TextComponent 封装前缀(TextComponent text, String prefixText) {
        return new TextPrefix(text, prefixText);
    }
    public static TextComponent 封装后缀(TextComponent text, String suffix) {
        return new TextPrefix(text, suffix);
    }

}